package model;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import db.LocalDatabase;
import db.RemoteDatabase;



public class Pedido {

		HashMap<Pudin.BaseSabor,HashMap<Pudin.PesoForma , List<Pudin>>> pudines;
		RemoteDatabase remoteDB;
		LocalDatabase localDB;
		ProduccionBase.TipoBase tipoBase;
		ProduccionBase.PuntoDeVenta puntoDeVenta;
		String baseSabor;
		DateTime dia;
		ArrayList<ArrayList<Object>> list;
		
		Pedido(DateTime dia,ProduccionBase.TipoBase tipoBase, String baseSabor) {
			remoteDB = new RemoteDatabase();
			localDB = new LocalDatabase();
			this.baseSabor = baseSabor;
			this.tipoBase = tipoBase;
			pudines = new HashMap<Pudin.BaseSabor,HashMap<Pudin.PesoForma , List<Pudin>>>();
			list = new ArrayList<ArrayList<Object>>();
			
			//this.dia = new DateTime(2011,8,8,0,0);
			this.dia = dia;
			this.constructPedidos();
		}
		
		public ArrayList<ArrayList<Object>> constructPedidos(/*,
				HashMap<Pudin.BaseSabor,HashMap<Pudin.PesoForma , List<Pudin>>> pudines*/) {
			
			switch(tipoBase) {
			case Vainilla:
			case Chocolate:
			case Postre:
			case Pie:
			case Helado:
				/*for(Pudin.PesoForma pesoForma: Pudin.PesoForma.values()) {
				
				}*/
				
				ArrayList<Integer> codigos = localDB.getCodigos(tipoBase, baseSabor);
				ArrayList<String> tamanos = localDB.getTamanos(tipoBase, baseSabor);
				ArrayList<Integer> pesos = localDB.getPesos(tipoBase, baseSabor);
				
				HashMap<Integer,String> mapaCodigoTamano = new HashMap<Integer,String>();
				HashMap<Integer,Integer> mapaCodigoPeso = new HashMap<Integer,Integer>();
				
				int index = 0;
				for(int codigo:codigos) {
					mapaCodigoTamano.put(codigo,tamanos.get(index));
					mapaCodigoPeso.put(codigo,pesos.get(index));
					index++;
				}
				
				 DateTimeFormatter fmt = DateTimeFormat.forPattern("dd/MM/yyyy");
				 String str = fmt.print(dia);
				 fmt = DateTimeFormat.forPattern("yyyy-MM-dd");
				 String fecha = fmt.print(dia);
				 
				HashMap<Integer,HashMap<Integer,Integer>> mapaUnidades = remoteDB.constructPedidos(str, codigos);
				
				Pudin.PesoForma[] pesoForma = Pudin.PesoForma.values();
				int i = 0;
				for(int codigo: codigos) {
					list.add(new ArrayList<Object>());
					//list.get(list.size()-1).add(pesoForma[i].rowname());
					list.get(list.size()-1).add(mapaCodigoTamano.get(codigo));
					int total = 0;
					for(int j =1; j< 8; j++) {
						list.get(list.size()-1).add(mapaUnidades.get(codigo).get(j));
						total += Integer.valueOf(mapaUnidades.get(codigo).get(j));
					}
					list.get(list.size()-1).add("0");
					list.get(list.size()-1).add(total);
					int inventario = localDB.getInventario(codigo,fecha);
					int adelanto = localDB.getAdelanto(codigo,fecha);
					list.get(list.size()-1).add(inventario);
					list.get(list.size()-1).add(adelanto);
					list.get(list.size()-1).add(adelanto-inventario);
					list.get(list.size()-1).add(mapaCodigoPeso.get(codigo));
					list.get(list.size()-1).add(codigo);
					i++;
				}
				break;
			default:
				break;
		}
			return list;
		}
		
		void changePedido(int row, int col, int value) {
			list.get(row).add(col, value);
		}
		
		ArrayList<ArrayList<Object>> getPedido() {
			return list;
		}
		
		
}
